{ lib, pkgs, ... }:
let
  myProg = pkgs.writeText "my-prog.fish" ''
    complete -c myprog -s o -l output
  '';

  myApp = pkgs.writeText "my-app.fish" ''
    complete -c myapp -s -v
  '';
in
{
  config = {
    programs.fish = {
      enable = true;

      completions = {
        my-prog = ''
          complete -c myprog -s o -l output
        '';
        my-app = {
          body = ''
            complete -c myapp -s -v
          '';
        };
      };
    };

    xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
      builtins.toFile "empty" ""
    );

    nmt = {
      description = "if fish.completions is set, check file exists and contents match";
      script = ''
        assertFileExists home-files/.config/fish/completions/my-prog.fish
        echo ${myProg}
        assertFileContent home-files/.config/fish/completions/my-prog.fish ${myProg}

        assertFileExists home-files/.config/fish/completions/my-app.fish
        echo ${myApp}
        assertFileContent home-files/.config/fish/completions/my-app.fish ${myApp}
      '';
    };
  };
}
